"""
音频项模型类
"""
from typing import Dict, Any
from datetime import datetime


class AudioItem:
    """
    音频项模型类，表示一个音频项
    """
    
    def __init__(self, id: str, file_path: str, title: str = "", 
                 timestamp: str = None, source_type: str = "file", 
                 source_id: str = None, metadata: Dict[str, Any] = None):
        """
        初始化音频项对象
        
        @param id: 音频项 ID
        @param file_path: 音频文件路径
        @param title: 标题
        @param timestamp: 时间戳（ISO 格式字符串），如果为 None 则使用当前时间
        @param source_type: 来源类型（file, speech, url 等）
        @param source_id: 来源 ID（如语音记录 ID）
        @param metadata: 元数据，包含额外信息
        """
        self.id = id
        self.file_path = file_path
        self.title = title or file_path.split("/")[-1]
        self.timestamp = timestamp or datetime.now().isoformat()
        self.source_type = source_type
        self.source_id = source_id
        self.metadata = metadata or {}
        
        # 播放状态
        self.is_playing = False
        self.is_paused = False
        self.position = 0.0
        self.duration = 0.0
        
        # 错误信息
        self.error = None
        
        # 解析时间戳
        try:
            self.datetime = datetime.fromisoformat(self.timestamp)
        except (ValueError, TypeError):
            self.datetime = datetime.now()
    
    def to_dict(self) -> Dict[str, Any]:
        """
        将音频项对象转换为字典
        
        @return: 字典表示
        """
        return {
            "id": self.id,
            "file_path": self.file_path,
            "title": self.title,
            "timestamp": self.timestamp,
            "source_type": self.source_type,
            "source_id": self.source_id,
            "metadata": self.metadata,
            "is_playing": self.is_playing,
            "is_paused": self.is_paused,
            "position": self.position,
            "duration": self.duration,
            "error": self.error
        }
    
    def __str__(self) -> str:
        """
        返回音频项的字符串表示
        
        @return: 字符串表示
        """
        status = "播放中" if self.is_playing else "已暂停" if self.is_paused else "就绪"
        return f"{self.title} ({status})"

    def copy(self) -> 'AudioItem':
        """
        创建该音频项的深度复制
        
        @return: 新的音频项对象
        """
        # 创建元数据的深拷贝
        metadata_copy = {}
        if self.metadata:
            import copy
            metadata_copy = copy.deepcopy(self.metadata)
        
        # 创建新的音频项对象
        copied = AudioItem(
            id=self.id,  # 注意：这里保留原ID，因为它用于队列识别
            file_path=self.file_path,
            title=self.title,
            timestamp=self.timestamp,
            source_type=self.source_type,
            source_id=self.source_id,
            metadata=metadata_copy
        )
        
        # 复制状态
        copied.is_playing = False  # 默认设为未播放状态
        copied.is_paused = False
        copied.position = 0.0  # 重置播放位置
        copied.duration = self.duration
        copied.error = None  # 清除错误状态
        
        return copied 